// 省市区模块，高德省市区
package xcity

import (
	"embed"

	"gorm.io/gorm"
)

// 省市区为从高德进行下载的省市区信息，然后另存为的CSV文件，更新时请重新下载保存到此目录下
// CSV文件要求：使用,分割各个列，然后使用换行符分割各个行，内容编码为GBK编码
// 此模块依赖xlog模块进行日志输出/入库
// 下载地址：https://lbs.amap.com/api/webservice/download
type Config struct {
	DB       *gorm.DB
	CityName string // 省市区存储的表名
}

var _default Config = Config{
	CityName: "city",
}

// 入口配置
func Regedit(c *Config) {
	if c != nil {
		if _default.DB == nil && c.DB != nil {
			_default.DB = c.DB
		}
		if c.CityName != "" {
			_default.CityName = c.CityName
		}
		// 数据库/表注册/创建
		if _default.DB != nil {
			_default.DB.
				Set("gorm:table_options", "ENGINE=MyISAM").
				AutoMigrate(&City{})
			insert_data()
		}
	}
}

// 城市的表结构信息
type City struct {
	Adcode   uint   `gorm:"column:ad_code;primaryKey;type:INT UNSIGNED;comment:省市区的ADCode;not null" json:"ad_code" form:"ad_code"`   // 省市区的ADCode
	CityCode string `gorm:"column:cidy_code;type:VARCHAR(4);comment:省市区的CityCode;index:city_code" json:"cidy_code" form:"cidy_code"` // 省市区的CityCode
	Name     string `gorm:"column:name;type:VARCHAR(100);comment:省市区的中文名;index:name" json:"name" form:"name"`                        // 中文名
}

// 获取表名
func (c *City) TableName() string {
	return _default.CityName
}

//go:embed city.csv
var CityCsv embed.FS
